﻿using System.Text.Json;
using System.Threading.Tasks;

namespace Apex.EventBus.Handlers
{
    /// <summary>
    /// 提供处理 JSON 集成事件的抽象基类
    /// </summary>
    /// <typeparam name="T">事件数据类型。</typeparam>
    public abstract class JsonIntegrationEventHandler<T> : IIntegrationEventHandler
    {
        /// <summary>
        /// 处理 JSON 格式的集成事件
        /// </summary>
        /// <param name="eventName">事件名称</param>
        /// <param name="json">事件数据的 JSON 字符串</param>
        /// <returns>异步任务</returns>
        public Task Handle(string eventName, string json)
        {
            // 将 JSON 字符串反序列化为指定类型的事件数据
            T? eventData = JsonSerializer.Deserialize<T>(json);
            // 调用抽象方法处理事件
            return HandleJson(eventName, eventData);
        }

        /// <summary>
        /// 抽象方法，处理反序列化后的事件数据
        /// </summary>
        /// <param name="eventName">事件名称</param>
        /// <param name="eventData">反序列化后的事件数据</param>
        /// <returns>异步任务。</returns>
        public abstract Task HandleJson(string eventName, T? eventData);
    }
}
